// 后台工作进程 - Background Worker

import { callDeepSeekAPI, translateLargeText } from "./api";
import {
  storeTranslation,
  getSettings,
  getTranslation,
} from "../utils/storage";
import { handleDownload } from "../utils/downloader";

// 初始化扩展
chrome.runtime.onInstalled.addListener(() => {
  console.log("DeepSeek Translate 扩展已安装");
});

// 监听来自内容脚本和弹出窗口的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  // 处理翻译请求
  if (request.action === "translate") {
    handleTranslation(request.content, sender.tab?.id)
      .then((result) => sendResponse({ success: true, data: result }))
      .catch((error) => sendResponse({ success: false, error: error.message }));
    return true; // 表示将异步发送响应
  }

  // 处理API密钥验证请求
  if (request.action === "validateApiKey") {
    validateApiKey(request.apiKey)
      .then((result) => sendResponse({ success: result }))
      .catch((error) => sendResponse({ success: false, error: error.message }));
    return true;
  }

  // 处理下载请求
  if (request.action === "download") {
    console.log("[DeepSeek后台] 收到下载请求", request);

    // 只处理PDF下载请求
    if (request.format === "pdf") {
      // 如果请求中包含内容，直接使用它
      if (request.content) {
        handleDownload(
          request.content,
          request.format,
          request.title || "DeepSeek翻译"
        )
          .then((result) => {
            console.log("[DeepSeek后台] 下载处理成功", result);
            sendResponse({ success: true });
          })
          .catch((error) => {
            console.error("[DeepSeek后台] 下载处理失败:", error);
            sendResponse({ success: false, error: error.message });
          });
      } else {
        // 否则从存储中获取内容
        handleDownloadRequest(
          request.format,
          request.title || "DeepSeek翻译",
          sender.tab?.id
        )
          .then((result) => {
            console.log("[DeepSeek后台] 下载处理成功", result);
            sendResponse({ success: true });
          })
          .catch((error) => {
            console.error("[DeepSeek后台] 下载处理失败:", error);
            sendResponse({ success: false, error: error.message });
          });
      }
    } else {
      // Markdown下载功能已禁用
      sendResponse({
        success: false,
        error: "只支持PDF下载功能",
      });
    }
    return true;
  }

  // 获取当前标签页ID
  if (request.action === "getTabId") {
    sendResponse({ tabId: sender.tab?.id });
    return false;
  }

  // 接收翻译完成通知，更新popup状态
  if (request.action === "translationComplete") {
    // 可以在这里记录状态，以便popup能够知道翻译已完成
    chrome.storage.local.set({
      translationStatus: {
        completed: true,
        tabId: request.tabId,
        timestamp: Date.now(),
      },
    });
    return false;
  }
});

// 处理翻译流程
async function handleTranslation(content, tabId) {
  try {
    // 获取用户设置
    const settings = await getSettings();

    if (!settings.apiKey) {
      throw new Error("请先在设置中配置API密钥");
    }

    let translatedContent;

    // 判断内容长度，决定使用哪种翻译方法
    if (content.length > 4000) {
      // 大型文本，需要分段翻译
      translatedContent = await translateLargeText(content, settings);
    } else {
      // 小型文本，直接翻译
      translatedContent = await callDeepSeekAPI(content, settings);
    }

    // 存储翻译结果
    await storeTranslation(translatedContent, tabId);

    return translatedContent;
  } catch (error) {
    console.error("翻译过程中发生错误:", error);
    throw error;
  }
}

// 处理下载请求
async function handleDownloadRequest(format, title, tabId) {
  try {
    // 获取翻译结果
    const content = await getTranslation(tabId);
    if (!content) {
      throw new Error("没有可下载的翻译内容");
    }

    // 使用下载工具处理下载
    return await handleDownload(content, format, title);
  } catch (error) {
    console.error("下载处理失败:", error);
    throw error;
  }
}

// 验证API密钥
async function validateApiKey(apiKey) {
  try {
    // 发送一个简单的请求来验证API密钥是否有效
    const result = await callDeepSeekAPI("这是一个API密钥验证测试", {
      apiKey,
      targetLang: "en",
      model: "deepseek-chat",
    });

    return !!result;
  } catch (error) {
    console.error("API密钥验证失败:", error);
    return false;
  }
}
